package com.atguigu.yygh.cmn.controller;


import com.atguigu.common.result.Result;
import com.atguigu.yygh.cmn.service.DictService;
import com.atguigu.yygh.model.cmn.Dict;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 组织架构表 前端控制器
 * </p>
 *
 * @author xueyoupeng
 * @since 2023-06-06
 */
@RestController
@RequestMapping("/admin/cmn/dict")
//@CrossOrigin//跨域注解
@Api("数据字典接口")
public class DictController {
    @Autowired
    DictService dictService;

    //根据dictCode查询数据字典列表
    @GetMapping("findByDictCode/{dictCode}")
    public Result findByDictCode(@PathVariable String dictCode){
        List<Dict> list = dictService.findListByDictCode(dictCode);
        return Result.ok().data("list",list);
    }

    //根据医院等级的value查询对应的数据字典名称
    @GetMapping("getName/{value}/{dictCode}")
    public String getName(
            @PathVariable String value,@PathVariable  String dictCode
    ){
        String name = dictService.getName(value,dictCode);
        return name;
    }

    //根据value查询省市区名称
    @GetMapping("getName/{value}")
    public String getName(@PathVariable String value){
        String name = dictService.getName(value,null);
        return name;
    }


    /*
     * 需求：根据数据字典的id查询下级数据字典列表，返回值封装到data.list属性；
     *       查询到每一个数字字典需要判断它是否存在下级，如果有下级，dict.hasChildren=true, 如果没有下级dict.hasChildren=false
     *       如何实现？在dict类中添加一个附加的属性
     *       @TableField(exist = false) 表中没有该属性，只是在类中的附加属性
     * @author: XueYouPeng
     * @time: 2023/6/6 18:18
     */
    @ApiOperation("根据id查询下级数据字典列表")
    @GetMapping("findChildData/{id}")
    public Result findChildData(@PathVariable Long id){
        List<Dict> list = dictService.findChildData(id);
        return Result.ok().data("list",list);
    }

    //file表示你本地的选中的文件，上传给这个接口
    //如果你的参数名不是file的，前端就必须在upload组件中添加一个name属性
    @ApiOperation("导入文件")
    @PostMapping("importData")
    public Result importExcel(MultipartFile file){
        dictService.importData(file);
        return Result.ok().message("导入成功");
    }

    //导出excel文件（文件下载） --- 导出所有数据
    @ApiOperation("导出全部")
    @GetMapping("exportData")
    public void exportData(HttpServletResponse response){
        //向客户端的浏览器响应数据（浏览器--》下载）
        dictService.exportData(response);
    }

    //导出指定的数据
    @ApiOperation("导出部分")
    @GetMapping("exportDataByIds")
    public void exportDataByIds(
            @RequestParam List<Long> ids,
            HttpServletResponse response
    ){
        dictService.exportDataByIds(ids,response);
    }

}

